#include <iostream>
#include <string>

using namespace std;

/*
1、函数模板 和 普通函数 都匹配，优先调用==普通函数==

2、函数模板 匹配最优时 ，优先使用==函数模板==

3、函数模板 可以调用空模板，强制使用 ==函数模板==
*/

class My_class
{
public:
    string name;
    int age;
};


int func(int val_1 , int val_2)
{
    cout << "普通函数" << endl;
    return val_1 + val_2;
}


template<typename T>
T func(T val_1 , T val_2)
{
    cout << "模板函数" << endl;
    return val_1 + val_2;
}


template<typename T>
void func(T & val_1)
{

    cout << val_1.name << endl;
    cout << val_1.age << endl;
}


// template<> void func(My_class & T)
// {
//     cout << T.name << endl;
//     cout << T.age << endl;
// }
void func(My_class & T)
{
    cout << T.name << endl;
    cout << T.age << endl;
}

int main(int argc, char const *argv[])
{
    int val_1 = 10;
    int val_2 = 80;

    cout << func<>(val_1 , val_2) << endl;

    My_class M_1;
    M_1.name = "张三";
    M_1.age = 18;

    func(M_1);
    
    return 0;
}